{
  "nbformat": 4,
  "nbformat_minor": 0,
  "metadata": {
    "colab": {
      "name": "Untitled1.ipynb",
      "provenance": []
    },
    "kernelspec": {
      "name": "python3",
      "display_name": "Python 3"
    },
    "language_info": {
      "name": "python"
    }
  },
  "cells": [
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "GF_6NV1AsBq1"
      },
      "source": [
        "**Plotting function**\n",
        "\n",
        "The function defined here takes `activations`, `task_labels` and and generates a heatmap that gives the fraction of examples across each task for which each unit is \"on\" after k-Winners."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "id": "nM_-MgdrraC-"
      },
      "source": [
        "import numpy as np\n",
        "import torch\n",
        "\n",
        "import matplotlib.pyplot as plt\n",
        "plt.rcParams.update({'font.size': 16})\n",
        "\n",
        "\n",
        "def plot(activations, task_labels):\n",
        "\n",
        "    # STEP 1: compute the array that we're going to plot\n",
        "    with torch.no_grad():\n",
        "        device = activations.device\n",
        "        num_tasks = 1 + task_labels.max().item()\n",
        "        _, num_units = activations.size()\n",
        "        h = torch.zeros((0, num_units))\n",
        "        h = h.to(device)\n",
        "        for t in range(num_tasks):\n",
        "            inds_t = torch.nonzero((task_labels == t).float(), as_tuple=True)\n",
        "            h_t = activations[inds_t]\n",
        "            h_t = (h_t != 0).float()\n",
        "            h_t = h_t.mean(dim=0)\n",
        "            h_t = h_t.unsqueeze(0)\n",
        "            h = torch.cat((h, h_t))\n",
        "\n",
        "    # STEP 2: plotting\n",
        "    NUM_UNITS_TO_PLOT = 64\n",
        "    h = h[:, :NUM_UNITS_TO_PLOT]\n",
        "    h = h.detach().cpu().numpy()\n",
        "\n",
        "    max_val = np.abs(h).max()\n",
        "    plt.imshow(h, cmap=\"Greens\", vmin=0.0, vmax=max_val)\n",
        "\n",
        "    plt.xlabel(\"Hidden unit\")\n",
        "    plt.ylabel(\"Task\")\n",
        "\n",
        "    # These next 2 lines stretch the figure vertically\n",
        "    ax = plt.gca()\n",
        "    ax.set_aspect(2.5)\n",
        "\n",
        "    ax.get_yaxis().set_ticks(range(0, 10))\n",
        "    \n",
        "    plt.tight_layout()\n",
        "    plt.show()"
      ],
      "execution_count": 3,
      "outputs": []
    },
    {
      "cell_type": "markdown",
      "metadata": {
        "id": "ZTlDCBm3r8ly"
      },
      "source": [
        "**Generating plots with saved data**\n",
        "\n",
        "The centroid script outputs `.pt` files which represent the activations and task labels. Specify these below to generate plots. Make sure that the 'key' in the file name is the same for both the activations and task labels."
      ]
    },
    {
      "cell_type": "code",
      "metadata": {
        "colab": {
          "base_uri": "https://localhost:8080/",
          "height": 213
        },
        "id": "_-iJ_zgOrflL",
        "outputId": "8c109128-1d59-4084-a2ba-ea41d6f92e19"
      },
      "source": [
        "if __name__ == \"__main__\":\n",
        "\n",
        "    # Load activations and task labels, then plot\n",
        "\n",
        "    # NOTE: the user must edit the key below\n",
        "    key = \"abcd\"\n",
        "\n",
        "    activations = torch.load(f\"x_10__activations.1_{key}.pt\", map_location=torch.device(\"cpu\"))\n",
        "    task_labels = torch.load(f\"y_10__activations.1_{key}.pt\", map_location=torch.device(\"cpu\"))\n",
        "\n",
        "    plt.cla()\n",
        "    plot(activations, task_labels)"
      ],
      "execution_count": 6,
      "outputs": [
        {
          "output_type": "display_data",
          "data": {
            "image/png": "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\n",
            "text/plain": [
              "<Figure size 432x288 with 1 Axes>"
            ]
          },
          "metadata": {
            "needs_background": "light"
          }
        }
      ]
    }
  ]
}